<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>

<body>

</body>

<!--分组&反向引用------------------------------------------------------------------------------------------------------->
<script type="text/html">
  //
  let reg1 = /(.)\1(.)\2/g;//查找形如aabb的串
  let reg2 = /(.)(.)\1\2/g;//查找形如abab的串
  let str = 'aabbccddxyxymnmn';
  console.log(str.replace(reg2, '$2$1$2$1'));
</script>

<!--string.replace特殊用法---------------------------------------------------------------------------------------------->
<script type="text/html">
  //
  let reg = /-(\w)/g;
  let str = 'the-first-name';
  console.log(str.replace(reg, function ($, $1) {
  console.log($);
  console.log($1);
  return $1.toUpperCase();
  }));
</script>

<!--去重练习------------------------------------------------------------------------------------------------------------>
<script type="text/html">
  //
  let reg = /(\w)\1+/g;//查找连续出现两次及以上的串
  let str = 'aaaaaafffffffsdfgsgggggdd';
  console.log(str.match(reg));
  console.log(str.replace(reg, '$1'));
</script>

<!--将形如aaaabbbb的字符串反转------------------------------------------------------------------------------------------->
<script type="text/html">
  //
  let reg = /(\w)\1{3}(\w)\2{3}/g;
  let str = 'aaaaabbbbcccdcdddd';
  console.log(str.match(reg));
  console.log(str.replace(reg, '$2$2$2$2$1$1$1$1'));
</script>

<!--将长数字变成反向隔三位加逗号的形式，如1234567890=>1,234,567,890-------------------------------------------------------->
<script type="text/html">
  //
  //查找空字符，要求其后跟随的字符串str为3的倍数位数字，且str到结尾，且str前为非单词边界
  let reg = /(?=(\B)(\d{3})+$)/g;
  //或者查找非单词边界（也是空字符了），要求其后跟随的字符串str为3的倍数位数字，且str到结尾
  // let reg = /(\B(?=(\d{3})+$)/g;
  let str1 = '123456789';
  console.log(str1.replace(reg, ','));
  let str2 = '1234567890';
  console.log(str2.replace(reg, ','));
  let str3 = '12345678900';
  console.log(str3.replace(reg, ','));
</script>

<!-- 密码规则：必须得有大写、小写、数字三种字符，6-16位-------------------------------------------------------------------->
<script type="text/html">
  //
  /*
   *反向预查：
   *这里有三类字符的规定：大写，小写，数字；
   *只考虑三种字符拼凑的话，一共有七种情况；
   *将三种“纯两种字符组合”的情况给排除掉；
   *而恰好又排除掉了三种“纯一种字符组合”的情况；
   *这样就只剩下一种情况，就是“三种字符都有”。
  */
  // let reg=/^(?![a-zA-Z]+$)(?![a-z0-9]+$)(?![A-Z0-9]+$)[a-zA-Z0-9]{6,16}$/;
  /*
   *正向预查：
   *我们设定三个条件（预查中可以不指定数量，事实上，有位置不确定的字符的话，很难指定整串数量）；
   *整个串可以是任意字符组成，但（在任意位置）必须包含一个[a-z]
   *整个串可以是任意字符组成，但（在任意位置）必须包含一个[A-Z]
   *整个串可以是任意字符组成，但（在任意位置）必须包含一个[0-9]
   *再加上最后条件给出数量限定
   *这样经过三个预查，就必然满足了“三种字符都必须有”。
  */
  let reg = /^(?=.*[a-z].*$)(?=.*[A-Z].*$)(?=.*[0-9].*$)[a-zA-Z0-9]{6,16}$/;
</script>

<!-- 英文字母汉字组成的字符串，用正则给英文单词前后加空格----------------------------------------------------------------- -->
<script type="text/html">
  //
  let str = '一gay我里giaogiao';
  //第一种
  // let reg = /[^a-zA-Z]+(?=[a-zA-Z])|[a-zA-Z]+(?=[^a-zA-Z])/g;
  // str = str.replace(reg, function ($) {
  //   return $ + ' '
  // });
  //第二种
  let reg = /\b[a-z]+\b/ig;
  str = str.replace(reg, value => " " + value + " ").trim();
  console.log(str);
</script>

</html>